library(tidyverse)
library(openintro)
library(readxl)
library(plotly)
library("rnaturalearth")
library("rnaturalearthdata")

my_map_theme <- function(){
  theme(panel.background=element_blank(),
        axis.text=element_blank(),
        axis.ticks=element_blank(),
        axis.title=element_blank())
}

Question 1

WHOLifeExpectancy <- read_excel("C:/RLibrary/Quiz 3 Andrew McLain/Andrew McLain Quiz 3/WHOLifeExpectancy.xlsx", 
    col_types = c("text", "numeric", "numeric", 
        "numeric", "numeric", "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric", "numeric", "numeric", 
        "numeric", "numeric", "numeric"), skip = 2)

names(WHOLifeExpectancy) <- c("country",
                              "HALEbirth_Both sexes_2016", 
                              "HALEbirth_Both sexes_2015",
                              "HALEbirth_Both sexes_2010",
                              "HALEbirth_Both sexes_2005",
                              "HALEbirth_Both sexes_2000",
                              "HALEbirth_Male_2016",
                              "HALEbirth_Male_2015", 
                              "HALEbirth_Male_2010",
                              "HALEbirth_Male_2005",
                              "HALEbirth_Male_2000",
                              "HALEbirth_Female_2016",
                              "HALEbirth_Female_2015",
                              "HALEbirth_Female_2010", 
                              "HALEbirth_Female_2005",
                              "HALEbirth_Female_2000",
                              "HALE60_Both sexes_2016", 
                              "HALE60_Both sexes_2015",
                              "HALE60_Both sexes_2010",
                              "HALE60_Both sexes_2005", 
                              "HALE60_Both sexes_2000",
                              "HALE60_Male_2016",
                              "HALE60_Male_2015", 
                              "HALE60_Male_2010",
                              "HALE60_Male_2005",
                              "HALE60_Male_2000",
                              "HALE60_Female_2016",
                              "HALE60_Female_2015",
                              "HALE60_Female_2010", 
                              "HALE60_Female_2005",
                              "HALE60_Female_2000")

Question 2

WHOLifeExpectancy <- WHOLifeExpectancy %>% 
                      pivot_longer(c(
                              "HALEbirth_Both sexes_2016", 
                              "HALEbirth_Both sexes_2015",
                              "HALEbirth_Both sexes_2010",
                              "HALEbirth_Both sexes_2005",
                              "HALEbirth_Both sexes_2000",
                              "HALEbirth_Male_2016",
                              "HALEbirth_Male_2015", 
                              "HALEbirth_Male_2010",
                              "HALEbirth_Male_2005",
                              "HALEbirth_Male_2000",
                              "HALEbirth_Female_2016",
                              "HALEbirth_Female_2015",
                              "HALEbirth_Female_2010", 
                              "HALEbirth_Female_2005",
                              "HALEbirth_Female_2000",
                              "HALE60_Both sexes_2016", 
                              "HALE60_Both sexes_2015",
                              "HALE60_Both sexes_2010",
                              "HALE60_Both sexes_2005", 
                              "HALE60_Both sexes_2000",
                              "HALE60_Male_2016",
                              "HALE60_Male_2015", 
                              "HALE60_Male_2010",
                              "HALE60_Male_2005",
                              "HALE60_Male_2000",
                              "HALE60_Female_2016",
                              "HALE60_Female_2015",
                              "HALE60_Female_2010", 
                              "HALE60_Female_2005",
                              "HALE60_Female_2000"),
                              names_to = 
                                "names",
                              values_to = 
                                "values") %>%
                          separate(names,
                                   c("category", 
                                     "sex",
                                     "year"),
                                   sep="_") %>%
                          pivot_wider(
                            names_from=category,
                            values_from=values
                          ) %>%
                          arrange(desc(year),
                                  country)
head(WHOLifeExpectancy, 10)
## # A tibble: 10 x 5
##    country     sex        year  HALEbirth HALE60
##    <chr>       <chr>      <chr>     <dbl>  <dbl>
##  1 Afghanistan Both sexes 2016       53     11.3
##  2 Afghanistan Male       2016       52.1   10.9
##  3 Afghanistan Female     2016       54.1   11.7
##  4 Albania     Both sexes 2016       68.1   16.3
##  5 Albania     Male       2016       66.7   15.3
##  6 Albania     Female     2016       69.6   17.4
##  7 Algeria     Both sexes 2016       65.5   15.8
##  8 Algeria     Male       2016       65.4   15.7
##  9 Algeria     Female     2016       65.6   15.8
## 10 Angola      Both sexes 2016       55.8   13.6

Question 3

world <- ne_countries(scale = "medium", returnclass = "sf")

WHOLifeExpectancy2 <- WHOLifeExpectancy %>%
                      filter(sex == "Both sexes",
                             year == "2016")

WHO_metadata <- read_csv("C:/RLibrary/Quiz 3 Andrew McLain/Andrew McLain Quiz 3/WHO_metadata.csv",
                         col_names=c("x",
                                     "ISO",
                                     "country")) %>%
                         select("ISO", "country")

WHOLifeExpectancy2_metadata <- WHOLifeExpectancy2 %>%
                               left_join(
                                 WHO_metadata,
                                 c("country"=
                                   "country"
                                 )
                               )

world_WHOLifeExpectancy2_metadata <- world %>%
                                left_join(
                                WHOLifeExpectancy2_metadata,
                                c("iso_a3"=
                                  "ISO")
                                )

Question 4

plot_world_WHOLifeExpectancy2_metadata <-
  ggplot(world_WHOLifeExpectancy2_metadata) +
  geom_sf(aes(fill=HALEbirth)) +
  my_map_theme() +
  labs(title = "Healthy Life Expectancy
                at Birth in 2016") +
  scale_fill_continuous("Healthy Life\nExpectancy\nat Birth (years)",
                        low="red", 
                        high="purple")

plot_world_WHOLifeExpectancy2_metadata

Question 5

world_WHOLifeExpectancy2_metadata <-
  world_WHOLifeExpectancy2_metadata %>%
  mutate(text = paste("<b>",country,"</b>\nHealthy Life Expectancy:",HALEbirth)) 

plot2_world_WHOLifeExpectancy2_metadata <-
  ggplot(world_WHOLifeExpectancy2_metadata) +
  geom_sf(aes(fill=HALEbirth
              +runif(nrow(
                world_WHOLifeExpectancy2_metadata)),
              text=text
              )) +
  my_map_theme() +
  scale_fill_continuous("Healthy Life\nExpectancy\nat Birth (years)",
                        low="red", 
                        high="purple")  


ggplotly(plot2_world_WHOLifeExpectancy2_metadata, 
         tooltip = "text") %>%
  style(hoveron = "fills") 
LS0tDQp0aXRsZTogIlF1aXogMyINCmF1dGhvcjogIkFuZHJldyBNY0xhaW4iDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydA0KLS0tDQoNCmBgYHtyIGxvYWQtcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkob3BlbmludHJvKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoInJuYXR1cmFsZWFydGgiKQ0KbGlicmFyeSgicm5hdHVyYWxlYXJ0aGRhdGEiKQ0KDQpteV9tYXBfdGhlbWUgPC0gZnVuY3Rpb24oKXsNCiAgdGhlbWUocGFuZWwuYmFja2dyb3VuZD1lbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dD1lbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3M9ZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlPWVsZW1lbnRfYmxhbmsoKSkNCn0NCmBgYA0KDQojIyMgUXVlc3Rpb24gMQ0KDQpgYGB7ciBxdWVzdGlvbi0xLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KV0hPTGlmZUV4cGVjdGFuY3kgPC0gcmVhZF9leGNlbCgiQzovUkxpYnJhcnkvUXVpeiAzIEFuZHJldyBNY0xhaW4vQW5kcmV3IE1jTGFpbiBRdWl6IDMvV0hPTGlmZUV4cGVjdGFuY3kueGxzeCIsIA0KICAgIGNvbF90eXBlcyA9IGMoInRleHQiLCAibnVtZXJpYyIsICJudW1lcmljIiwgDQogICAgICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCANCiAgICAgICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgDQogICAgICAgICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCANCiAgICAgICAgIm51bWVyaWMiLCAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiLCAibnVtZXJpYyIsIA0KICAgICAgICAibnVtZXJpYyIsICJudW1lcmljIiwgIm51bWVyaWMiKSwgc2tpcCA9IDIpDQoNCm5hbWVzKFdIT0xpZmVFeHBlY3RhbmN5KSA8LSBjKCJjb3VudHJ5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFYmlydGhfQm90aCBzZXhlc18yMDE2IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX0JvdGggc2V4ZXNfMjAxNSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX0JvdGggc2V4ZXNfMjAxMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX0JvdGggc2V4ZXNfMjAwNSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX0JvdGggc2V4ZXNfMjAwMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX01hbGVfMjAxNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX01hbGVfMjAxNSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9NYWxlXzIwMTAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9NYWxlXzIwMDUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9NYWxlXzIwMDAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAxNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX0ZlbWFsZV8yMDE1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFYmlydGhfRmVtYWxlXzIwMTAiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFYmlydGhfRmVtYWxlXzIwMDUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAwMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX0JvdGggc2V4ZXNfMjAxNiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9Cb3RoIHNleGVzXzIwMTUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9Cb3RoIHNleGVzXzIwMTAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9Cb3RoIHNleGVzXzIwMDUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfQm90aCBzZXhlc18yMDAwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfTWFsZV8yMDE2IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfTWFsZV8yMDE1IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX01hbGVfMjAxMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX01hbGVfMjAwNSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX01hbGVfMjAwMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX0ZlbWFsZV8yMDE2IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfRmVtYWxlXzIwMTUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9GZW1hbGVfMjAxMCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9GZW1hbGVfMjAwNSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX0ZlbWFsZV8yMDAwIikNCg0KYGBgDQoNCiMjIyBRdWVzdGlvbiAyDQoNCmBgYHtyIHF1ZXN0aW9uLTIsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpXSE9MaWZlRXhwZWN0YW5jeSA8LSBXSE9MaWZlRXhwZWN0YW5jeSAlPiUgDQogICAgICAgICAgICAgICAgICAgICAgcGl2b3RfbG9uZ2VyKGMoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX0JvdGggc2V4ZXNfMjAxNiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9Cb3RoIHNleGVzXzIwMTUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9Cb3RoIHNleGVzXzIwMTAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9Cb3RoIHNleGVzXzIwMDUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9Cb3RoIHNleGVzXzIwMDAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9NYWxlXzIwMTYiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9NYWxlXzIwMTUiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFYmlydGhfTWFsZV8yMDEwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFYmlydGhfTWFsZV8yMDA1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFYmlydGhfTWFsZV8yMDAwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFYmlydGhfRmVtYWxlXzIwMTYiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEViaXJ0aF9GZW1hbGVfMjAxNSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX0ZlbWFsZV8yMDEwIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRWJpcnRoX0ZlbWFsZV8yMDA1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFYmlydGhfRmVtYWxlXzIwMDAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9Cb3RoIHNleGVzXzIwMTYiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfQm90aCBzZXhlc18yMDE1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfQm90aCBzZXhlc18yMDEwIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfQm90aCBzZXhlc18yMDA1IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX0JvdGggc2V4ZXNfMjAwMCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX01hbGVfMjAxNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX01hbGVfMjAxNSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9NYWxlXzIwMTAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9NYWxlXzIwMDUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9NYWxlXzIwMDAiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9GZW1hbGVfMjAxNiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEFMRTYwX0ZlbWFsZV8yMDE1IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfRmVtYWxlXzIwMTAiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIQUxFNjBfRmVtYWxlXzIwMDUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhBTEU2MF9GZW1hbGVfMjAwMCIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfdG8gPSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc190byA9IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWVzIikgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlKG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJjYXRlZ29yeSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXgiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ZWFyIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcD0iXyIpICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBwaXZvdF93aWRlcigNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19mcm9tPWNhdGVnb3J5LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc19mcm9tPXZhbHVlcw0KICAgICAgICAgICAgICAgICAgICAgICAgICApICU+JQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJhbmdlKGRlc2MoeWVhciksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeSkNCmhlYWQoV0hPTGlmZUV4cGVjdGFuY3ksIDEwKQ0KYGBgDQoNCiMjIyBRdWVzdGlvbiAzDQoNCmBgYHtyIHF1ZXN0aW9uLTMsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp3b3JsZCA8LSBuZV9jb3VudHJpZXMoc2NhbGUgPSAibWVkaXVtIiwgcmV0dXJuY2xhc3MgPSAic2YiKQ0KDQpXSE9MaWZlRXhwZWN0YW5jeTIgPC0gV0hPTGlmZUV4cGVjdGFuY3kgJT4lDQogICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNleCA9PSAiQm90aCBzZXhlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPT0gIjIwMTYiKQ0KDQpXSE9fbWV0YWRhdGEgPC0gcmVhZF9jc3YoIkM6L1JMaWJyYXJ5L1F1aXogMyBBbmRyZXcgTWNMYWluL0FuZHJldyBNY0xhaW4gUXVpeiAzL1dIT19tZXRhZGF0YS5jc3YiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcz1jKCJ4IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVNPIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bnRyeSIpKSAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoIklTTyIsICJjb3VudHJ5IikNCg0KV0hPTGlmZUV4cGVjdGFuY3kyX21ldGFkYXRhIDwtIFdIT0xpZmVFeHBlY3RhbmN5MiAlPiUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0X2pvaW4oDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXSE9fbWV0YWRhdGEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJjb3VudHJ5Ij0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdW50cnkiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KDQp3b3JsZF9XSE9MaWZlRXhwZWN0YW5jeTJfbWV0YWRhdGEgPC0gd29ybGQgJT4lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfam9pbigNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0hPTGlmZUV4cGVjdGFuY3kyX21ldGFkYXRhLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJpc29fYTMiPQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJU08iKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoNCmBgYA0KDQojIyMgUXVlc3Rpb24gNA0KDQpgYGB7ciBxdWVzdGlvbi00LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KDQpwbG90X3dvcmxkX1dIT0xpZmVFeHBlY3RhbmN5Ml9tZXRhZGF0YSA8LQ0KICBnZ3Bsb3Qod29ybGRfV0hPTGlmZUV4cGVjdGFuY3kyX21ldGFkYXRhKSArDQogIGdlb21fc2YoYWVzKGZpbGw9SEFMRWJpcnRoKSkgKw0KICBteV9tYXBfdGhlbWUoKSArDQogIGxhYnModGl0bGUgPSAiSGVhbHRoeSBMaWZlIEV4cGVjdGFuY3kNCiAgICAgICAgICAgICAgICBhdCBCaXJ0aCBpbiAyMDE2IikgKw0KICBzY2FsZV9maWxsX2NvbnRpbnVvdXMoIkhlYWx0aHkgTGlmZVxuRXhwZWN0YW5jeVxuYXQgQmlydGggKHllYXJzKSIsDQogICAgICAgICAgICAgICAgICAgICAgICBsb3c9InJlZCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgaGlnaD0icHVycGxlIikNCg0KcGxvdF93b3JsZF9XSE9MaWZlRXhwZWN0YW5jeTJfbWV0YWRhdGENCg0KYGBgDQoNCiMjIyBRdWVzdGlvbiA1DQoNCmBgYHtyIHF1ZXN0aW9uLTUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp3b3JsZF9XSE9MaWZlRXhwZWN0YW5jeTJfbWV0YWRhdGEgPC0NCiAgd29ybGRfV0hPTGlmZUV4cGVjdGFuY3kyX21ldGFkYXRhICU+JQ0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCI8Yj4iLGNvdW50cnksIjwvYj5cbkhlYWx0aHkgTGlmZSBFeHBlY3RhbmN5OiIsSEFMRWJpcnRoKSkgDQoNCnBsb3QyX3dvcmxkX1dIT0xpZmVFeHBlY3RhbmN5Ml9tZXRhZGF0YSA8LQ0KICBnZ3Bsb3Qod29ybGRfV0hPTGlmZUV4cGVjdGFuY3kyX21ldGFkYXRhKSArDQogIGdlb21fc2YoYWVzKGZpbGw9SEFMRWJpcnRoDQogICAgICAgICAgICAgICtydW5pZihucm93KA0KICAgICAgICAgICAgICAgIHdvcmxkX1dIT0xpZmVFeHBlY3RhbmN5Ml9tZXRhZGF0YSkpLA0KICAgICAgICAgICAgICB0ZXh0PXRleHQNCiAgICAgICAgICAgICAgKSkgKw0KICBteV9tYXBfdGhlbWUoKSArDQogIHNjYWxlX2ZpbGxfY29udGludW91cygiSGVhbHRoeSBMaWZlXG5FeHBlY3RhbmN5XG5hdCBCaXJ0aCAoeWVhcnMpIiwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvdz0icmVkIiwgDQogICAgICAgICAgICAgICAgICAgICAgICBoaWdoPSJwdXJwbGUiKSAgDQoNCg0KZ2dwbG90bHkocGxvdDJfd29ybGRfV0hPTGlmZUV4cGVjdGFuY3kyX21ldGFkYXRhLCANCiAgICAgICAgIHRvb2x0aXAgPSAidGV4dCIpICU+JQ0KICBzdHlsZShob3Zlcm9uID0gImZpbGxzIikgDQpgYGANCg==